home *** CD-ROM | disk | FTP | other *** search
/ Clickx 115 / Clickx 115.iso / software / tools / windows / tails-i386-0.16.iso / live / filesystem.squashfs / usr / lib / perl5 / Devel / GlobalDestruction.pm < prev   
Encoding:
Perl POD Document  |  2008-09-26  |  1.8 KB  |  98 lines

  1. #!/usr/bin/perl
  2.  
  3. package Devel::GlobalDestruction;
  4.  
  5. use strict;
  6. use warnings;
  7.  
  8. use vars qw($VERSION @ISA);
  9.  
  10. BEGIN {
  11.     $VERSION = '0.02';
  12.  
  13.     local $@;
  14.  
  15.     eval {
  16.         require XSLoader;
  17.         __PACKAGE__->XSLoader::load($VERSION);
  18.         1;
  19.     } or do {
  20.         require DynaLoader;
  21.         push @ISA, 'DynaLoader';
  22.         __PACKAGE__->bootstrap($VERSION);
  23.     };
  24. }
  25.  
  26. use Sub::Exporter -setup => {
  27.     exports => [ qw(in_global_destruction) ],
  28.     groups  => { default => [ -all ] },
  29. };
  30.  
  31. __PACKAGE__
  32.  
  33. __END__
  34.  
  35. =pod
  36.  
  37. =head1 NAME
  38.  
  39. Devel::GlobalDestruction - Expose PL_dirty, the flag which marks global
  40. destruction.
  41.  
  42. =head1 SYNOPSIS
  43.  
  44.     package Foo;
  45.     use Devel::GlobalDestruction;
  46.  
  47.     use namespace::clean; # to avoid having an "in_global_destruction" method
  48.  
  49.     sub DESTROY {
  50.         return if in_global_destruction;
  51.  
  52.         do_something_a_little_tricky();
  53.     }
  54.  
  55. =head1 DESCRIPTION
  56.  
  57. Perl's global destruction is a little tricky to deal with WRT finalizers
  58. because it's not ordered and objects can sometimes disappear.
  59.  
  60. Writing defensive destructors is hard and annoying, and usually if global
  61. destruction is happenning you only need the destructors that free up non
  62. process local resources to actually execute.
  63.  
  64. For these constructors you can avoid the mess by simply bailing out if global
  65. destruction is in effect.
  66.  
  67. =head1 EXPORTS
  68.  
  69. This module uses L<Sub::Exporter> so the exports may be renamed, aliased, etc.
  70.  
  71. =over 4
  72.  
  73. =item in_global_destruction
  74.  
  75. Returns the current value of C<PL_dirty>.
  76.  
  77. =back
  78.  
  79. =head1 VERSION CONTROL
  80.  
  81. This module is maintained using Darcs. You can get the latest version from
  82. L<http://nothingmuch.woobling.org/code>, and use C<darcs send> to commit
  83. changes.
  84.  
  85. =head1 AUTHOR
  86.  
  87. Yuval Kogman E<lt>nothingmuch@woobling.orgE<gt>
  88.  
  89. =head1 COPYRIGHT
  90.  
  91.     Copyright (c) 2008 Yuval Kogman. All rights reserved
  92.     This program is free software; you can redistribute
  93.     it and/or modify it under the same terms as Perl itself.
  94.  
  95. =cut
  96.  
  97.  
  98.